﻿//
// Copyright (c) 2024 BPer
//

#ifndef BPERWEBRTC_BPERRTCSESSION_H_
#define BPERWEBRTC_BPERRTCSESSION_H_

#include <bperrtc/BPerRtcSession.h>
#include <bperice/BPerRtcStun.h>

typedef struct{
	BPerRtcSession* session;
	int32_t (*addAudioTrack)(BPerRtcSession *session,BPerAudioCodec codec);
	int32_t (*addVideoTrack)(BPerRtcSession *session,BPerVideoCodec codec);

	int32_t (*addTransceiver)(BPerRtcSession *session,BPerRtcDirection direction);

	int32_t (*createOffer)(BPerRtcSession *session, char **psdp);
	int32_t (*createDataChannel)(BPerRtcSession *session);

	int32_t (*createAnswer)(BPerRtcSession* session,char* answer);
	int32_t (*createHttpAnswer)(BPerRtcSession* session,char* answer);

	int32_t (*setLocalDescription)(BPerRtcSession* session,char* sdp);
	int32_t (*setRemoteDescription)(BPerRtcSession* session,char* sdp);

	//void (*init)(BPerRtcSession* session,BPerRtcDirection role);
	void (*close)(BPerRtcSession *session);

	int32_t (*on_video)(BPerRtcSession* session,BPerFrame* p);
	int32_t (*on_audio)(BPerRtcSession* session,BPerFrame *p);
	int32_t (*on_message)(BPerRtcSession *session, BPerFrame *p);
	int32_t (*notify)(BPerRtcSession *session, BPerRtcMessageType mess);
	BPerBool (*isAlive)(BPerRtcSession* session);
	BPerBool (*isConnected)(BPerRtcSession* session);
	void (*receive)(BPerRtcSession *session, char *data, int32_t size);
	void (*updateCandidateAddress)(BPerRtcSession *session,char* ip,int32_t port) ;
	void (*onConnectionStateChange)(BPerRtcSession *session,BPerRtcConnectionState state);

}BPerRtcConnection;

#ifdef __cplusplus
extern "C"{
#endif

int32_t bPer_create_rtcConnection(BPerRtcConnection* conn,BPerStreamConfig* streamconfig,BPerAVInfo* avinfo);
void bPer_destroy_rtcConnection(BPerRtcConnection* conn);


#ifdef __cplusplus
}
#endif
#endif /* BPERWEBRTC_BPERRTCSESSION_H_ */
